var viewAddtrainingprogram = new function() {
    var _this       = this;
    var _listeners  = false;
    
    // Harjoituspohjat
    this.templates = {};
    
    /**
     * Lisää uuden harjoituspohjarivin.
     *
     * Data parametri pitää sisällään seuraavat attribuutit:
     *
     * templatehashid       = Rivin harjoituspohjan hashid (oletus null)
     * days_to_next_workout = Päivät seuraavaan harjoitukseen (oletus 7)
     *
     * @param   object  data    Rivin tiedot
     */
    this.addTemplateLink = function(data) {
        var templatehashid      = objGet(data,"templatehashid",null,true);
        var daysToNextWorkout   = objGet(data,"days_to_next_workout",7,true);
        
        var random = Rand.generate();
        
        var $tr = $("<tr>").
            addClass("addtrainingprogram-tr-template-link");        
        
        // Harjoituspohjat
        var $select = $(FT.select("templatelink["+random+"][templatehashid]",_this.templates,{
                "class": "form-control"
            },null,templatehashid)
        );
        
        $("<td>").
            clone().
            append($select).
            appendTo($tr);
        
        // Päivät seuraavaan harjoitteeseen
        var $input = $(FT.number("templatelink["+random+"][days_to_next_workout]",daysToNextWorkout,{
                "class":    "form-control",
                "step":     1
            })
        );
        
        $("<td>").
            clone().
            append($input).
            appendTo($tr);
            
        // Poista rivi
        var $button = $(FT.button(null,{
            "class":    "addtrainingprogram-button-delete-templatelink btn btn-default",
            "title":    "Next exercise"
        })).append(
                $("<span>").
                    addClass("glyphicon glyphicon glyphicon-minus-sign").
                    attr("aria-hidden","true")
            );
        
        $("<td>").
            clone().
            append($button).
            appendTo($tr);
        
        // Liitä rivi taulukkoon
        $tr.
            appendTo($("#addtrainingprogram-tbody-template-link"));
    }
    
    /**
     * Alustaa näkymän elementit.
     */
    this.initializePage = function() {        
        if (!_listeners) {
            // Poistaa rivin
            $(document).on("click",".addtrainingprogram-button-delete-templatelink",function(){
                var $this = $(this);
                var length = $this.
                    parents("#addtrainingprogram-tbody-template-link:first").
                    find(".addtrainingprogram-tr-template-link").
                    length;
                    
                if (length > 1) {
                    $this.
                        parents(".addtrainingprogram-tr-template-link:first").
                        remove();
                }
            });
            
            // Lisää rivin
            $(document).on("click","#addtrainingprogram-button-add-templatelink",function(){
                _this.addTemplateLink();
            });
            
            _listeners = true;
        }
        
        _this.addTemplateLink();
        
        $(".addtrainingprogram-button").removeAttr("disabled");
    }
    
    /**
     * Lataa harjoitusohjelman tiedot ruudulle.
     *
     * @param   object  data    Harjoitusohjelman tiedot
     */
    this.loadProgram = function(data) {
        showLoader();
                
        $("#addtrainingprogram-input-program-name").
            val(objGet(data,"program_name"));
                    
        $("#addtrainingprogram-input-startdate").
            val(objGet(data,"startdate"));
            
        $("#addtrainingprogram-input-enddate").
            val(objGet(data,"enddate"));
            
        var records = objGet(data,"records",[]);
        if (records.length) {
            $("#addtrainingprogram-textarea-record").
                val(objGet(records[0],"record"));
        }
        
        $("tr.addtrainingprogram-tr-template-link").
            remove();
        
        var links = objGet(data,"templatelink",[]);
        for (var i in links) {
            _this.addTemplateLink({
                "templatehashid":       objGet(links[i],"templatehashid"),
                "days_to_next_workout": objGet(links[i],"days_to_next_workout")
            });
        }
        
        hideLoader();
    }
    
    /**
     * Palauttaa lomakkeen takaisin oletustilaan.
     */
    this.resetForm = function() {
        $("#addtrainingprogram-input-hashid").
            remove();
            
        $("#addtrainingprogram-input-program-name").
            val("");
            
        $("#addtrainingprogram-textarea-record").
            val("");
            
        $("tr.addtrainingprogram-tr-template-link").
            remove();
            
        _this.addTemplateLink();
    }
}